package main

import (
	"fmt"
	"reflect"
)

type Human struct {
	Age int
}

type student struct {
	Name string
}

func gen() interface{} {
	return Human{
		Age: 10,
	}
}

func main() {

	s := gen()

	//第一种方法
	if b, ok := s.(Human); ok { //对于v.(T)这样的判断，v的类型一定要是interface类型
		fmt.Println(b.Age)
	}
	//第二种方法
	fmt.Printf("s type:%T, value:%v\n", s, s)

	// 第三种方法
	fmt.Println(reflect.TypeOf(s))

	//第四种方法
	switch inst := s.(type) {
	case student:
		fmt.Println(inst.Name)
	default:
		fmt.Println("unknow")
	}

}
